import java.util.Random;
import java.util.Scanner;

public class TestCirculation {
    //递归方法，输入一个非负整数，返回组成它的数字之和
    public static int sumfun(int n){
        if (n<10){
            return n%10;
        }
        return sumfun(n/10)+n%10;
    }

    public static void main(String[] args) {
        System.out.println(sumfun(123345));
    }
    //汉诺塔问题

    //递归求斐波那契数列的第 N 项
    public static int fibc(int n) {
        if(n == 1 || n == 2) {
            return 1;
        }
        return fibc(n-1)+fibc(n-2);
    }

    public static void main16(String[] args) {
        System.out.println(fibc(5));
    }

    //按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) （递归）
    public static void print(int n){
        if (n<10){
            System.out.print(n%10+" ");
            return;
        }
        print(n/10);
        System.out.print(n%10+" ");
    }
    public static void main15(String[] args) {
        print(1234);
    }
    //递归求 1 + 2 + 3 + ... + 10
    public static int sum(int n){
        if (n==1){
            return 1;
        }
        return n+sum(n-1);
    }

    public static void main14(String[] args) {
        System.out.println(sum(10));
    }
    //递归求 N 的阶乘
    public static int func(int n){
        if (n==1){
            return 1;
        }
        return n*func(n-1);
    }
    public static void main13(String[] args) {
        System.out.println(func(5));
    }
    ////在同一个类中定义多个方法：要求不仅可以求2个整数的最大值，还可以求3个小数的最大值
    public static int max(int a,int b){
        return a>b?a:b;
    }
    public static double max(double a,double b,double c){
        double m1=a>b?a:b;
        return m1>c?m1:c;
    }

    public static void main12(String[] args) {
        System.out.println(max(11, 23));
        System.out.println(max(12.32, 23.33, 34.3));
    }
    //斐波那契数列的第n项——迭代实现
    //1 1 2 3……
    public static int fib(int n){
        int f1=1;
        int f2=1;
        int f3=-1;
        for (int i = 3; i <=n  ; i++) {
            if(n==1||n==2){
                return 1;
            }
            f3=f1+f2;
            f1=f2;
            f2=f3;
        }
        return f3;
    }

    public static void main11(String[] args) {
        System.out.println(fib(5));
    }
    //1-100之间既能被3整除又能被4整除的数字
    public static void main10(String[] args) {
        for (int i = 1; i <=100 ; i++) {
            if (i%12!=0){
                continue;
            }
            System.out.println(i);
        }
    }
    //完成猜数字游戏,用户输入数字，判断该数字是大于，小于，还是等于随机生成的数字，等于的时候退出程序
    public static void main9(String[] args) {
        Random random = new Random();
        int toGuess = random.nextInt(101);//产生[0-101)之间的随机数
        while (true){
            Scanner scanner=new Scanner(System.in);
            int n=scanner.nextInt();
            if (n>toGuess){
                System.out.println("数字大于随机生成的数字!");
            }
            if (n<toGuess){
                System.out.println("数字小于随机生成的数字！");
            }
            if (n==toGuess){
                System.out.println("数字等于随机生成的数字！");
                break;
            }
        }
    }
    //出0～n之间的所有“水仙花数”
    // “水仙花数”是指一个三位数，其各位数字的立方和确好等于该数本身
    public static void main8(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        for (int i = 0; i <=n ; i++) {
            int count=1;
            int temp=i;
            //123
            while (temp/10!=0){
                count++;
                temp=temp/10;
            }
            temp=i;
            int sum=0;
            while (temp!=0){
                sum+=Math.pow(temp%10,count);
                temp=temp/10;
            }
            if (sum==i){
                System.out.println(i+" ");
            }
        }
    }
    //计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
    public static void main7(String[] args) {
        double sum=0;
        int f=1;
        for (int i = 1; i <=100 ; i++) {
            sum+=1.0*f/i;
            f*=(-1);
        }
        System.out.println(sum);
    }
    //两个数的最大公约数,输入：20 40,输出：20
    public static void main6(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int a=scanner.nextInt();
        int b=scanner.nextInt();
        while (b!=0){
            int temp=a%b;
            a=b;
            b=temp;
        }
        System.out.println(a );
    }
    //编写程序数一下 1到 100 的所有整数中出现多少个数字9
    //9 19 29 39 49 59 69 79 89 99 91 92 93 94 95 96 97 98
    public static void main5(String[] args) {
        int count=0;
        for (int i = 1; i <100 ; i++) {
            if (i%10==9){
               count++;
            }
            if (i/10==9){
                count++;
            }
        }
        System.out.println(count);
    }
    //输出 1000 - 2000 之间所有的闰年
    public static void main4(String[] args) {
        for (int i = 1000; i <=2000 ; i++) {
            if (i%4==0&&i%100!=0||(i%400==0)){
                System.out.print(i+" ");
            }
        }
    }
    //打印 1 - 100 之间所有的素数
    public static void main3(String[] args) {
        int i;
        for (i=2;i<=100;i++){
            boolean isPrime=true;
            for (int j = 2; j <=Math.sqrt(i) ; j++) {
                if (i%j==0){
                    isPrime=false;
                    break;
                }
            }
            if (isPrime){
                System.out.print(i+" ");
            }
        }
    }
    public static void main2(String[] args) {
        int i;
        for (i=2;i<=100;i++){
            boolean isPrime=true;
            for (int j = 2; j <i/2 ; j++) {
                if (i%j==0){
                    isPrime=false;
                    break;
                }
            }
            if (isPrime){
                System.out.print(i+" ");
            }
        }
    }
    public static void main1(String[] args) {
        int i;
        for (i=2;i<=100;i++){
            boolean isPrime=true;
            for (int j = 2; j <=i-1 ; j++) {
                if (i%j==0){
                    isPrime=false;
                    break;
                }
            }
            if (isPrime){
                System.out.print(i+" ");
            }
        }
    }
}
